/**
在 Node.js 中，HTTP 请求对象是通过  `http`  模块创建的 HTTP 服务器时传递给回调函数的参数之一。请求对象（ `req` ）包含了关于客户端请求的所有信息。
  1. 请求对象概述
  请求对象包含了关于 HTTP 请求的详细信息，包括请求方法、请求头、请求路径、查询参数、请求体等。它是处理 HTTP 请求的关键。
  2. 常用属性和方法
   2.1  `req.method` 
  - 描述: 获取请求的方法（如 GET、POST、PUT、DELETE 等）。
  - 示例:
  const http = require('http');

  const server = http.createServer((req, res) => {
      console.log(`请求方法: ${req.method}`);
      res.end('Hello, World!');
  });

  server.listen(3000);
   2.2  `req.url` 
  - 描述: 获取请求的 URL，包括路径和查询字符串。
  - 示例:
  const http = require('http');

  const server = http.createServer((req, res) => {
      console.log(`请求 URL: ${req.url}`);
      res.end('Hello, World!');
  });

  server.listen(3000);
   2.3  `req.headers` 
  - 描述: 获取请求头信息，返回一个对象，包含所有请求头的键值对。
  - 示例:
  const http = require('http');

  const server = http.createServer((req, res) => {
      console.log('请求头:', req.headers);
      res.end('Hello, World!');
  });

  server.listen(3000);
   2.4  `req.on('data', callback)` 
  - 描述: 监听请求体数据的接收。对于 POST 请求，数据通常是通过请求体发送的，可以通过这个事件来接收。
  - 示例:
  const http = require('http');

  const server = http.createServer((req, res) => {
      let body = '';

      req.on('data', (chunk) => {
          body += chunk.toString(); // 将数据块转换为字符串
      });

      req.on('end', () => {
          console.log('请求体:', body);
          res.end('数据接收成功');
      });
  });

  server.listen(3000);
   2.5  `req.query` 
  - 描述: 在 Node.js 的原生  `http`  模块中没有直接提供获取查询参数的方法，但可以使用 URL 模块解析请求 URL，获取查询参数。
  - 示例:
  const http = require('http');
  const url = require('url');

  const server = http.createServer((req, res) => {
      const query = url.parse(req.url, true).query; // 解析查询参数
      console.log('查询参数:', query);
      res.end('Hello, World!');
  });

  server.listen(3000);
  3. 总结
  Node.js 的 HTTP 请求对象提供了丰富的信息，帮助开发者处理客户端请求。通过访问请求对象的属性和方法，开发者可以获取请求的详细信息，处理请求体和查询参数等。掌握请求对象的使用对于构建高效的 Node.js 应用程序至关重要。
 */
const http = require("http");

const server = http.createServer((request, response) => {
  // request 是一个可读流; response 是一个可写流
  console.log(request);
  console.log(request.method); // 请求方法
  console.log(request.url); // 请求路径
  console.log(request.headers); // 请求头
  console.log(request.rawHeaders); // 原始请求头

  const url = request.url;
  const method = request.method;
  if (url === "/login") {
    if (method === "POST") {
      res.end("登录成功~");
    } else {
      res.end("请使用POST请求");
    }
  } else if (url === "/products") {
    res.end("商品列表~");
  } else if (url === "/lyric") {
    res.end("天空好想下雨, 我好想住你隔壁!");
  }
});

server.listen(8080, () => {
  console.log("服务器启动成功");
});
